﻿Imports System.IO
Imports System.Data
Imports MetodosComuns
Imports extranet.BC
Imports extranet.BE
Imports System.Collections.Generic

Partial Class AdmFranquia
  Inherits System.Web.UI.Page

  Private Const MESSAGE_ERRO_NA_INSERCAO As String = "Erro na inserção do Registro!."
  Private Const MESSAGE_ERRO_NA_ALTERACAO As String = "Erro na atualização do Registro!."
  Private Const MESSAGE_ERRO_NA_EXCLUSAO As String = "Erro na exclusão do Registro!."

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    '==================       PROCEDIMENTO  PADRÃO  SEGURANÇA     =============================
    Dim objBESeguranca As BESeguranca
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    If IsNothing(objBEUsuario) Then Response.Redirect(TELA_LOGOUT)
    Session("strTela") = MetodosComuns.GetCurrentPageName()
    If Not IsPostBack Then          ' SEGURANÇA
      objBESeguranca = BCSeguranca.SelecionaPermissoes(objBEUsuario.GrupoAcesso, Session("strTela"))
      If Not objBESeguranca.Autorizado Then Response.Redirect(TELA_LOGOUT)
      Session("objBESeguranca") = objBESeguranca
    Else
      objBESeguranca = Session("objBESeguranca")
    End If

    '==================       ALTERAR SE FOR NECESSARIO          ===============================
    If Not IsPostBack Then
      mostraDados(ESTADO_INICIAL)
    End If
  End Sub

  Protected Sub mostraMensagemDeErro(ByVal message As String)
    lblErro.Visible = True
    lblErro.Text = message
  End Sub

  Protected Sub mostraDados(ByVal estado As Int16)
    Dim objBESeguranca As BESeguranca = DirectCast(Session("objBESeguranca"), BESeguranca)
    lblErro.Visible = False

    ' SEGURANÇA
    'Select Case estado
    '  Case ESTADO_INICIAL, ESTADO_DETALHE
    '    If Not objBESeguranca.Leitura Then estado = ESTADO_BLOQUEADO
    '  Case ESTADO_EDICAO
    '    If Not objBESeguranca.Modificacao Then estado = IIf(objBESeguranca.Leitura, ESTADO_DETALHE, ESTADO_BLOQUEADO)
    '  Case ESTADO_CADASTRO
    '    If Not objBESeguranca.Escrita Then estado = IIf(objBESeguranca.Leitura, ESTADO_DETALHE, ESTADO_BLOQUEADO)
    'End Select

    ' Set o estado do Form View
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        fv_Usuario.ChangeMode(FormViewMode.ReadOnly)
      Case ESTADO_DETALHE
        fv_Usuario.ChangeMode(FormViewMode.ReadOnly)
      Case ESTADO_EDICAO
        fv_Usuario.ChangeMode(FormViewMode.Edit)
    End Select

    ' Set Registro(s) segundo o estado
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_DETALHE, ESTADO_EDICAO
        mostraRegistro()
      Case ESTADO_CADASTRO
    End Select

  End Sub

  Protected Sub fv_Usuario_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles fv_Usuario.DataBound
    Select Case fv_Usuario.CurrentMode
      Case FormViewMode.Insert
      Case FormViewMode.Edit
      Case FormViewMode.ReadOnly
        fv_Usuario.FindControl("lnkEditar").Visible = True
    End Select
  End Sub

  Protected Sub lnkEditar_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraDados(ESTADO_EDICAO)
  End Sub

  Protected Sub mostraRegistro()
    Dim listUsuario As List(Of BEUsuario) = BCUsuario.Selecionar(DirectCast(Session("objBEUsuario"), BEUsuario).Usuario)
    lblTituloPagina.Text = listUsuario(0).Franquia.Nome
    fv_Usuario.DataSource = BCFranquia.Selecionar(listUsuario(0).Franquia.IdFranquia)
    fv_Usuario.DataBind()
    setTrigger()
  End Sub

  Protected Sub setTrigger()
    Dim trigger As New PostBackTrigger()
    Dim scm As ScriptManager = ScriptManager.GetCurrent(Me.Page)
    Dim ctrl As Control
    If Not fv_Usuario.CurrentMode = FormViewMode.ReadOnly Then
      ctrl = fv_Usuario.FindControl(IIf(fv_Usuario.CurrentMode = FormViewMode.Insert, "btnCadastrar", "btnAtualizar"))
      trigger.ControlID = ctrl.ClientID
      updPanel.Triggers.Add(trigger)
      scm.RegisterPostBackControl(ctrl)
    End If
  End Sub

  Protected Sub btnCancelarAlteracao_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraDados(ESTADO_DETALHE)
  End Sub

  Protected Property IsEditable() As Boolean
    Get
      Dim usuario As BEUsuario = Session("objBEUsuario")
      Dim strGrupo = usuario.GrupoAcesso.Nome.ToUpper()
      Return (strGrupo = "ADMIN")
    End Get
    Set(ByVal value As Boolean)
    End Set
  End Property

  Protected Sub fv_Usuario_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.FormViewUpdateEventArgs) Handles fv_Usuario.ItemUpdating
    If processaRegistro() Then
      fv_Usuario_ItemUpdated(sender, Nothing)
    End If
  End Sub

  Protected Sub fv_Usuario_ItemUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.FormViewUpdatedEventArgs) Handles fv_Usuario.ItemUpdated
    mostraDados(ESTADO_INICIAL)
  End Sub

  Protected Function processaRegistro() As Boolean
    Dim boolInsercao As Boolean = (fv_Usuario.CurrentMode = FormViewMode.Insert)
    Dim usuario As BEUsuario = Session("objBEUsuario")
    Dim franquia As New BEFranquia()
    Dim booSucesso As Boolean = True
    Try
      Dim strAvatar As String = DirectCast(fv_Usuario.FindControl("lbl_Avatar"), Label).Text
      With franquia
        .IdFranquia = Convert.ToInt32(fv_Usuario.DataKey(0))
        .Nome = DirectCast(fv_Usuario.FindControl("txt_nome"), TextBox).Text
        .Avatar = strAvatar
        .Pais = DirectCast(fv_Usuario.FindControl("txt_pais"), TextBox).Text
        .Uf = DirectCast(fv_Usuario.FindControl("ddl_Uf"), DropDownList).SelectedValue.ToString()
        .Cidade = DirectCast(fv_Usuario.FindControl("txt_cidade"), TextBox).Text
        .Cep = DirectCast(fv_Usuario.FindControl("txt_cep"), TextBox).Text
        .Logradouro = DirectCast(fv_Usuario.FindControl("txt_logradouro"), TextBox).Text
        .Telefone = DirectCast(fv_Usuario.FindControl("txt_telefone"), TextBox).Text
        .Email = DirectCast(fv_Usuario.FindControl("txt_email"), TextBox).Text
        .Informacoes = DirectCast(fv_Usuario.FindControl("txt_Informacoes"), TextBox).Text
      End With
      If boolInsercao Then
        BCFranquia.Cadastrar(franquia)
      Else
        BCFranquia.Atualizar(franquia)
      End If
      usuario.Franquia = franquia
    Catch ex As Exception
      mostraMensagemDeErro(MESSAGE_ERRO_NA_ALTERACAO)
      booSucesso = False
    End Try
    Return booSucesso
  End Function

  'Protected Sub btnAtualizar_Click(ByVal sender As Object, ByVal e As System.EventArgs)
  'End Sub

End Class
